home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac: Not for Sale / Another.not.for.sale (Australia).iso / fade into you / being there / Services / Gopher / Gopher Protocol < prev    next >
Text File  |  1992-03-15  |  30KB  |  621 lines

  1.                      The internet Gopher protocol
  2.            a distributed document search and retrieval protocol
  3.  
  4.  Bob Alberti, Farhad Anklesaria, Paul Lindner, Mark McCahill, Daniel Torrey    
  5.     University of Minnesota Microcomputer and Workstation Networks Center
  6.                      Spring 1991; Revised Spring 1992
  7.  
  8.  
  9. gopher  n.  1. Any of various short tailed, burrowing mammals of the family 
  10. Geomyidae, of North America.  2. (Amer. colloq.) Native or inhabitant of 
  11. Minnesota: the Gopher State.  3. (Amer. colloq.) One who runs errands, does 
  12. odd-jobs, fetches or delivers documents for office staff.  4. (computer tech.) 
  13. software following a simple protocol for burrowing through a TCP/IP internet.
  14.  
  15.  
  16. Abstract
  17.  
  18. The internet Gopher protocol is designed for distributed document search and 
  19. retrieval. This document describes the protocol, lists some of the 
  20. implementations currently available, and has an overview of how to implement new
  21. client and server applications. 
  22.  
  23. The protocol and software follows a client-server model.  Documents reside on 
  24. many autonomous servers on the Internet.  Users run client software on their 
  25. desktop systems, connecting to a server and sending the server a selector (a 
  26. line of text, which may be empty) via a TCP connection at a well-known port.  
  27. The server responds with a block of text terminated by a period on a line by 
  28. itself and closes the connection.  No state is retained by the server.
  29.  
  30. While documents (and services) reside on many servers, Gopher client software 
  31. presents users  with a hierarchy of items and directories much like a file 
  32. system. The Gopher interface is designed to resemble a file system since a file 
  33. system is a good model for organizing documents and services; the user sees what
  34. amounts to one big networked information system containing document items, 
  35. directory items, and full-text searching capabilities across subsets of the 
  36. information base.
  37.  
  38. Servers return either directory lists or documents.  Each item in a directory is
  39. identified by a type (the kind of object the item is), user-visible name (used 
  40. to browse and select from menu listings), an opaque selector string (typically 
  41. containing a pathname used by the destination host to locate the desired 
  42. object), a host name (which host to contact to obtain this item), and an IP port
  43. number (the port at which the server process listens for connections.)  The user
  44. only sees the user-visible name.  The client software can locate and retrieve 
  45. any item by the trio of selector, hostname, and port.
  46.  
  47. In submitting a query to a search server, the client sends the selector string 
  48. and the list of words to be matched. The response  yields "virtual directory 
  49. listings" that contain files matching the search criteria.  
  50.  
  51. Distribution of this document is unlimited.  Please send comments to the Gopher 
  52. development team: <gopher@boombox.micro.umn.edu>.  Experimentation with the 
  53. mechanisms described here is encouraged. 
  54.  
  55.  
  56. 1.    Introduction
  57.  
  58. The Internet Gopher protocol is designed primarily to act as a distributed 
  59. document delivery system.  While documents (and services) reside on many 
  60. servers, Gopher client software presents users  with a hierarchy of items and 
  61. directories much like a file system.  In fact, the Gopher interface is designed 
  62. to resemble a file system since a file system is a good model for locating 
  63. documents and services. Why model a campus-wide information system after a file 
  64. system? Several reasons:
  65.  
  66. (a)    A hierarchical arrangement of information is familiar to many users. 
  67. Hierarchical  directories containing items (such as documents, servers, and 
  68. subdirectories)  are widely used in electronic bulletin boards and other 
  69. campus-wide information systems. People who access a campus-wide information 
  70. server will expect some sort of hierarchical organization to the information 
  71. presented. 
  72.  
  73. (b)    A file-system style hierarchy can be expressed in a simple syntax.   The 
  74. syntax used for the internet Gopher protocol is easily understandable, and was 
  75. designed to make debugging servers and clients easy. You can use Telnet to 
  76. simulate an internet Gopher client's requests and observe the responses from a 
  77. server.  Special purpose software tools are not required.  By keeping the syntax
  78. of the pseudo-file system client/server protocol simple, we can also achieve 
  79. better performance for a very common user activity: browsing through the 
  80. directory hierarchy.
  81.  
  82. (c)    Since Gopher originated in a University setting, one of the goals was for 
  83. departments to have the option of publishing information from their inexpensive 
  84. desktop machines, and since much of the information can be presented as simple 
  85. text files arranged in directories, a protocol modeled after afile system has 
  86. immediate utility. Because there can be a direct mapping from the file system on
  87. the user's desktop machine to the directory structure published via the Gopher 
  88. protocol, the problem of writing server software for slow desktop systems is 
  89. minimized.
  90.  
  91. (d)    A file system metaphor is extensible. By giving a "type" attribute to items 
  92. in the pseudo-file system, it is possible to accommodate documents other than 
  93. simple text documents. Complex database services can be handled as a separate 
  94. type of item. A file-system metaphor does not rule out search or database-style 
  95. queries for access to documents. A search-server type is also defined in this 
  96. pseudo-file system.  Such servers return "virtual directories" or list of 
  97. documents matching user specified criteria. 
  98.  
  99.  
  100.  
  101. 2.     The internet Gopher Model
  102.  
  103. A detailed BNF rendering of the internet Gopher syntax is available in the 
  104. appendix... but a close reading of the appendix may not be necessary to 
  105. understand the internet Gopher protocol. 
  106.  
  107. In essence, the Gopher protocol consists of a client connecting to a server and 
  108. sending the server a selector (a line of text, which may be empty) via a TCP 
  109. connection.  The server responds with a block of text terminated with a period 
  110. on a line by itself, and closes the connection.  No state is retained by the 
  111. server between transactions with a client. The simple nature of the protocol 
  112. stems from the need to implement servers and clients  for the slow, smaller 
  113. desktop computers (1 MB Macs and DOS machines), quickly, and efficiently. 
  114.  
  115. Below is a simple example of a client/server interaction; more complex 
  116. interactions are dealt with later.   Assume that a "well-known" Gopher server 
  117. (this may be duplicated, details are discussed later) listens at a well known 
  118. port for the campus (much like a domain-name server).  The only configuration 
  119. information the client software retains is this server's name  and port number 
  120. (in this example that machine is rawBits.micro.umn.edu and the port 70). In the 
  121. example below the # denotes the TAB character.
  122.  
  123. Client:                    (Opens connection to rawBits.micro.umn.edu at port 70)
  124. Server:                    (Accepts connection but says nothing)
  125. Client:    <CR><LF>            (Sends an empty line: Meaning "list what you have")
  126. Server:                    (Sends a series of lines, each ending with CR LF)
  127. 0About internet Gopher#Stuff:About us#rawBits.micro.umn.edu#70
  128. 1Around the University of Minnesota#Z,5692,AUM#underdog.micro.umn.edu#70
  129. 1Microcomputer News & Prices#Prices/#pserver.bookstore.umn.edu#70
  130. 1Courses, Schedules, Calendars##events.ais.umn.edu#120
  131. 1Student-Staff Directories##uinfo.ais.umn.edu#70
  132. 1Departmental Publications#Stuff:DP:#rawBits.micro.umn.edu#70
  133.                     (.....etc.....)
  134. .                    (Period on a line by itself)
  135.                     (Server closes connection)
  136.  
  137.  
  138.  
  139. The first character on each line tells whether the line describes a document, 
  140. directory, CSO (qi) server, or error (characters '0', '1', '2', or  '3'; there 
  141. are a handful more of these characters described later).  The succeeding 
  142. characters up to the tab form a user display string to be shown to the user for 
  143. use in selecting this document (or directory) for retrieval.  The first 
  144. character of the line is really defining the type of item described on this 
  145. line. In nearly every case, the Gopher client software will give the users some 
  146. sort of idea about what type of item this is (by displaying an icon,  a short 
  147. text tag, or the like).
  148.  
  149. The characters following the tab, up to the next tab form a selector string that
  150. the client software must send to the server to retrieve the document (or obtain 
  151. the directory listing of the directory).  The selector string should mean 
  152. nothing to the client software; it should never be modified by the client.   In 
  153. practice, the selector string is often a pathname or other file selector used by
  154. the server to locate the item desired.  The last two tab delimited fields denote
  155. the domain-name of the host that has this document (or directory), and the port 
  156. at which to connect.
  157.  
  158. In the example, line 1 describes a document the user will see as "About internet
  159. Gopher".  To retrieve this document, the client software must send the retrieval
  160. string: "Stuff:About us" to rawBits.micro.umn.edu at port 70.  If the client 
  161. does this, the server will respond with the contents of the document, terminated
  162. by a period on a line by itself.  A client might present the user with a view of
  163. the world something like the following window:
  164.  
  165.  
  166.     1.  About internet Gopher
  167.     2.  Around the University of Minnesota - Offices and Services/
  168.     3.  Courses, Schedules, Calendars/
  169.     4.  Events/
  170.     5.  Microcomputer News & Prices/
  171.     6.  Student-Staff Directories/
  172.     7.  University Relations Information and Forms/
  173.     8.  Weather for the Twin Cities
  174.  
  175.  
  176.  
  177. (A similar view is presented by the curses based UNIX gopher client.
  178. The slashes on the ends of certain lines denote that the item is a directory.
  179. The Mac client precedes the line with the icon of a file or a folder. )
  180.  
  181.  
  182. The user does not know or care that the items up for selection may reside on 
  183. many different machines anywhere on the Internet.  
  184.  
  185. Suppose the user selects the line "Microcomputer News & Prices".  This appears 
  186. to be a directory, and so the user expects to see contents of the directory upon
  187. request that it be fetched.  The following lines illustrate the ensuing 
  188. client-server interaction:
  189.  
  190. Client:                    (Connects to pserver.bookstore.umn.edu at port 70)
  191. Server:                    (Accepts connection but says nothing)
  192. Client:    Prices/            (Sends the magic string terminated by CRLF)
  193. Server:                    (Sends a series of lines, each ending with CR LF)
  194. 0About Prices#Prices/Aboutus#pserver.bookstore.umn.edu#70
  195. 0Macintosh Prices#Prices/Mac#pserver.bookstore.umn.edu#70
  196. 0ZEOS Prices#Prices/ZEOS#pserver.bookstore.umn.edu#70
  197. 0IBM Prices#Prices/Ick#pserver.bookstore.umn.edu#70
  198. 0Printer & Peripheral Prices#Prices/PPP#pserver.bookstore.umn.edu#70
  199.                     (.....etc.....)
  200. .                    (Period on a line by itself)
  201.                     (Server closes connection)
  202.  
  203.  
  204.  
  205. 3.     More details
  206.  
  207. 3.1  Locating services
  208. Documents (or other services that may be viewed ultimately as documents, such as
  209. a student-staff phonebook) are linked to the machine they are on by the trio of 
  210. selector string, machine domain-name, and IP port.  It is anticipated that there
  211. will be one well-known top-level or root server for an institution or campus.  
  212. The information on this server may be duplicated by one or more other servers to
  213. avoid a single point of failure and to spread the load over several servers.  
  214. Departments that wish to put up their own departmental servers need to register 
  215. the machine name and port with the administrators of the top-level Gopher 
  216. server, much the same way as they register a machine name with the campus 
  217. domain-name server.  An entry which points to the departmental server will then 
  218. be made at the top level server.  This ensures that users will be able to 
  219. navigate their way down what amounts to a virtual hierarchical file system with 
  220. a well known root to any campus server if they desire.  
  221.  
  222. Note that there is no requirement that a department register secondary servers 
  223. with the central top-level server; they may just place a link to the secondary 
  224. servers in their own primary servers.  They may indeed place links to any 
  225. servers they desire in their own server, thus creating a customized view of 
  226. thethe Gopher information universe; links can of course point back at the 
  227. top-level server.  The virtual (networked) file system is therefore an arbitrary
  228. graph structure and not necessarily a rooted tree.  The top-level (duplicated) 
  229. node is merely one convenient, well-known point of entry.  
  230.  
  231.  
  232. 3.2  Server portability and naming
  233. It is recommended that all registered servers have alias names that are used by 
  234. Gopher clients to locate them.  Links to these servers should use these alias 
  235. names rather than the primary names.  If information needs to be moved from one 
  236. machine to another, a simple change of domain name system alias names allows 
  237. this to occur without any reconfiguration of clients in the field.  In short,  
  238. the domain name system may simply be used in the near term to re-map a server to
  239. a new address.  There is nothing to prevent secondary servers or services from 
  240. running on otherwise named servers or ports other than  70 , however these 
  241. should be reachable via a primary server. 
  242.  
  243.  
  244. 3.3 Contacting server administrators
  245. It is recommended that every server administrator have a document called "About 
  246. internet Gopher" as the first item in their server's top level directory.  In 
  247. this document should be a short description of what the server holds, as well as
  248. name, address, phone, and an e-mail address of the person who administers the 
  249. server.  This provides a way for users to get immediate word to the 
  250. administrator of a server that is not running correctly.  It is also recommended
  251. that administrators place the date of last update in files for which such 
  252. information matters to the users.
  253.  
  254.  
  255. 3.4  Modular addition of services
  256. The first character of each line in a server-supplied directory listing 
  257. indicates whether the item is a file (character '0'),  a directory (character 
  258. '1'), or an error (character '3').  This is the base set of item types in the 
  259. Gopher protocol.  It is desirable for clients to be able to use different 
  260. services and speak different protocols (simple ones such as finger; others such 
  261. as CSO (qi) phonebook service, or Telnet, or X.500 directory service) as needs 
  262. dictate.  For example if a server-supplied directory listing marks a certain 
  263. item with type character '2', then it means that to use this item, the client 
  264. must speak the CSO (qi) protocol.  This removes the need to be able to 
  265. anticipate all future needs and hard-wire them in the basic internet Gopher 
  266. protocol; it keeps the basic protocol extremely simple.  In spite of this 
  267. simplicity, the scheme has the capability to expand and change with the times by
  268. simply adding an agreed upon type-character for a new service.  This also allows
  269. the client implementations to evolve in a modular fashion, simply by dropping in
  270. a module (or launching a new process) for some new service.  The servers for the
  271. new service of course have to know nothing about internet Gopher; they can just 
  272. be off-the shelf CSO, X.500, or other servers.  We do not however, encourage 
  273. arbitrary or machine-specific proliferation of service types. 
  274.  
  275. On the other hand, subsets of other document retrieval schemes may be mapped 
  276. onto the Gopher protocol by means of "gateway-servers".  Examples of such 
  277. servers include Gopher-to-FTP gateways, Gopher-to-Archie gateways, 
  278. Gopher-to-WAIS gateways,  etc.  There are a number of advantages of such 
  279. mechanisms. First, a relatively powerful server machine inherits both the 
  280. intelligence and work, rather than the more modest, inexpensive desktop system 
  281. that typically runs client software.  Clients do not have to be modified to take
  282. advantage of a new resource.  
  283.  
  284.  
  285. 3.5  Building clients
  286. A client simply sends the retrieval string to a server if it wants to retrieve a
  287. document or view the contents of a directory.  Of course, each host may have 
  288. pointers to other hosts, resulting in a "graph" (not necessarily a rooted tree) 
  289. of hosts.  The client software will save  (or rather "stack") the locations that
  290. it has visited in search of a document.  The user will therefore always be able 
  291. to back out of the current location by unwinding the stack.  If a client does 
  292. not understand what a say, type  'B' item (not a core item) is, then it simply 
  293. ignores the item in the directory listing; the user never even sees it. A 
  294. service (particularly a critical one) may be duplicated on more then one server.
  295. A client unable to contact a particular server should try one of the duplicated 
  296. servers if they exist. Ideally, a client should pick one of the duplicated 
  297. servers at random to spread the load among servers. 
  298.  
  299.  
  300. 3.6  Building ordinary internet Gopher servers
  301. The retrieval string sent to the server might be a path to a file or directory. 
  302. It might be the name of a script,  an application or even a query that generates
  303. the document or directory returned.  The server uses the string it gets up to 
  304. but not including a CR-LF or a TAB, whichever comes first.  Following the 
  305. optional TAB is a date-time descriptor (YYYYMMDDhhmmss). 
  306.  
  307. The TAB and date descriptor parts exist for the efficiency of full-text search 
  308. servers (description follows).  If the TAB and date descriptor are present, the 
  309. server should return only items that have been modified since the specified 
  310. date-time descriptor.  If the server cannot implement this By-Mod-Date 
  311. filtering, it can just discard the date descriptor.  For example the selector:
  312.  
  313. Julius Caesar<CR><LF>        
  314.  
  315. returns a directory listing if "Julius Caesar" is a directory selector, and 
  316. returns the file if "Julius Caesar" selects a file. The selector:
  317.  
  318. Julius Caesar<TAB>19910315000000<CR><LF>
  319.  
  320. if a directory selector, includes all sub-directories but only includes file 
  321. names that have been modified since 15 March 1991.  If a file selector, the file
  322. is only returned if it has been modified since 15 March 1991, otherwise an empty
  323. return.
  324.  
  325. All intelligence is carried by the server implementation rather than the 
  326. protocol.  What you build into more exotic servers is up to you.    Server 
  327. implementations may grow as needs dictate and time allows.
  328.  
  329. 3.7  Special purpose servers
  330. There are two special server types (beyond the normal Gopher server) also 
  331. discussed below: 
  332.  
  333. 1.  A  server directory listing can point at a CSO (qi) nameserver (the server 
  334. returns a first character of '2') to allow a campus student-staff phonebook 
  335. lookup service.  This may show up on the user's list of choices, perhaps 
  336. preceded by the icon of a phone-book.  If this item is selected, the client 
  337. software will resort to a pure CSO nameserver protocol when it connects to the 
  338. appropriate host.  We expect that client support for this to be superseded soon 
  339. by X.500 modules.  The basic module of the client software would remain 
  340. unchanged; we would need to add an X.500 module.
  341.  
  342. 2.  A server can also point at a "full-text search server" (returns a first 
  343. character of '7').  To implement campus internet (or subnet) wide searching 
  344. capability, some machines may maintain full-text indexes on the contents of text
  345. documents held by some subset of Gopher servers.  A "full-text search server" 
  346. responds to client requests with a list of all documents that contain (or don't 
  347. contain) a one or more words.  The client sends the server the selector string, 
  348. a tab, and the search string (words to search for). If the selector string is 
  349. empty, the client merely sends the search string.  The server returns the 
  350. equivalent of a directory listing for documents matching the search criteria.  
  351. The words "and", "or", and "not" are reserved as Boolean operators, and 
  352. expressions with Boolean operators are evaluated from left to right. Example: a 
  353. client might specify the search criteria as "salmon and spinach or asparagus" to
  354. a full-text search server and the server will respond in the normal Gopher 
  355. fashion, returning a flat list of documents that match the criteria.  
  356.  
  357. The CSO addition exists for historical reasons: at time of design, the campus 
  358. phone-book servers at the University of Minnesota used the CSO protocol and it 
  359. seemed simplest to adapt to them.  The index-server is however very much a 
  360. Gopher in spirit, albeit with a slight twist in the meaning of the 
  361. selector-string.
  362.  
  363. 3.7.1  Building CSO-servers
  364. A CSO Nameserver implementation for UNIX is available from Steve Dorner (anon 
  365. ftp from uxa.cso.uiuc.edu).  We do not anticipate implementing it on other 
  366. machines.
  367.  
  368.  
  369. 3.7.2  Building full-text search servers
  370. An full-text search server is a special-purpose server that knows about the 
  371. internet Gopher scheme for retrieving documents.  These servers maintain a 
  372. full-text index of the contents of plain text documents on Gopher servers in 
  373. some specified domain.  A  gopher full-text search server was implemented using 
  374. several NeXTstations because we were able to take advantage of the full-text 
  375. index/search engine built into the NeXT system software.  A search server for 
  376. generic UNIX systems based on the public domain WAIS search engine, is also 
  377. available.
  378.  
  379. By using several index servers (rather than a monolithic index server) we are 
  380. able to build and search indexes in parallel (although the client software is 
  381. not aware of this). While maintaining full-text indexes of documents distributed
  382. over many machines may seem a daunting task, the task can be broken into smaller
  383. pieces (update only a portion of the indexes, search several partial indexes in 
  384. parallel) so that it is manageable. By spreading this task over several small, 
  385. cheap (and fast) workstations we are able to take advantage of fine-grain 
  386. parallelism. Again, the client software is not aware of this. Client software 
  387. only needs to know that it can send a search string to an index server  and 
  388. receives a list of documents that contain the words in the search string. 
  389.  
  390. 3.8  Item type characters
  391. The client software decides what items are available by looking at the first 
  392. character of each line in a directory listing.   Augmenting this list  can 
  393. extend the protocol.  A list of defined item-type characters follows:
  394. 0    Item is a file
  395. 1    Item is a directory
  396. 2    Item is a CSO (qi) phone-book server
  397. 3    Error
  398. 4    Item is a BinHexed Macintosh file.   [Use of this type is discouraged]
  399. 5    Item is DOS binary archive of some sort.  [Use of this type is discouraged]
  400. 6    Item is a UNIX uuencoded file.   [Use of this type is discouraged]
  401. 7    Item is an Index-Search server.
  402. 8    Item points to a text-based telnet session.
  403. 9    Item is a binary file!  Client must read until the connection closes.  Beware.
  404. +    Item is a redundant server (same information as the previous server)
  405.  
  406. Characters '0' through 'Z'  are reserved.  Local experiments should use other 
  407. characters.  We discourage arbitrary, machine-specific extensions.  Note that 
  408. for type 5 or type 9 the client must be prepared to read until the connection 
  409. closes.  There will be no period at the end of the file; the contents of these 
  410. files are binary and the client must decide what to do with them based perhaps 
  411. on the .xxx extension. These binary types are experimental and largely 
  412. unsatisfactory.  Some binary encoding scheme should really be used.  Current 
  413. contenders are a simple headed block, uuencode or MIME base64 encoding... (Watch
  414. this space!)
  415.  
  416.  
  417. 3.9  User display strings and server selector strings
  418. User display strings are intended to be displayed on a line on a typical screen 
  419. for a user's viewing pleasure.  While many screens can accommodate 80 character 
  420. lines, some space is needed to display a tag of some sort to tell the user what 
  421. sort of item this is. Because of this, the user display string should be kept 
  422. under  70 characters in length.  Clients may truncate to a length convenient to 
  423. them.  Selector strings sent to the server are most easily manipulated (both by 
  424. file system and server application) using short (255 byte) Pascal strings on 
  425. PCs... so selector strings should be less than 255 characters in length. 
  426.  
  427.  
  428.  
  429. 4    Simplicity is intentional
  430.  
  431. As far as possible we desire any new features to be carried as new protocols 
  432. that will be hidden behind new document-types.    The internet Gopher philosophy
  433. is: 
  434.  
  435. (a)    Intelligence is held by the server.  Clients have the option of being able 
  436. to access new document types (different, other types of servers) by simply 
  437. recognizing the document-type character.  Further intelligence to be borne by 
  438. the protocol should be minimized.
  439.  
  440. (b)    The well-tempered server ought to send "text".  Should this include tabs, 
  441. formfeeds, frufru?  Probably not, but rude servers will probably send them 
  442. anyway.  Publishers of documents will be given simple tools (filters) that will 
  443. alert them if there are any funny characters in the documents they wish to 
  444. publish, and give them the opportunity to strip the questionable characters out;
  445. the publisher may well refuse.  Note: Type 5 or 9 items are hacks for binary 
  446. file transmission that may change shortly.  In these cases the server just sends
  447. the binary and then closes the connection.
  448.  
  449. (c)    The well-tempered client should do something reasonable with funny 
  450. characters received in text; filter them out, leave them in, whatever.
  451.  
  452.  
  453.  
  454. Appendix.
  455.  
  456.            Paul's NQBNF (Not Quite BNF) for the Gopher Protocol.
  457.  
  458. Note:  This is modified BNF (as used by the Pascal people) with a few
  459.        English modifiers thrown in.  Stuff enclosed in '{}' can be
  460.        repeated zero or more times.  Stuff in '[]' denotes a set of
  461.        items.  The '-' operator denotes set subtraction.
  462.  
  463.  
  464. Directory Entity
  465.  
  466. CR-LF     ::= ASCII Carriage Return Character followed by Line Feed
  467.               character. 
  468.  
  469. Tab       ::= ASCII Tab character.
  470.  
  471. NUL       ::= ASCII NUL character.
  472.  
  473. UNASCII   ::= ASCII - [Tab CR-LF NUL].
  474.  
  475. Lastline  ::= '.'CR-LF.
  476.  
  477. TextBlock ::= Block of ASCII text not containing Lastline pattern.
  478.  
  479. Type      ::= UNASCII.
  480.  
  481. RedType   ::= '+'.
  482.  
  483. User_Name ::= {UNASCII}.
  484.  
  485. Selector  ::= {UNASCII}.
  486.               
  487. Host      ::= {{UNASCII - ['.']} '.'} {UNASCII - ['.']}.
  488.               
  489. Note: This is a Fully Qualified Domain Name as defined in RFC 830.
  490.       (e.g. gopher.micro.umn.edu)  Hosts that have a CR-LF
  491.       TAB or NUL in their name get what they deserve.
  492.  
  493. Digit     ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' .
  494.  
  495. DigitSeq  ::= digit {digit}.
  496.  
  497. Port      ::= DigitSeq.
  498.  
  499. Note: Port corresponds the the TCP Port Number, its value should
  500.       be in the range [0..65535]; port 70 is officially assigned
  501.       to gopher.
  502.  
  503. DirEntity ::= Type User_Name Tab Selector Tab Host Tab Port CR-LF 
  504.           {RedType User_Name Tab Selector Tab Host Tab Port CR-LF}
  505.  
  506.  
  507.  
  508. Notes:
  509.  
  510.    It is *highly* recommended that the User_Name field contain only
  511.    printable characters, since many different clients will be using
  512.    it.  However if eight bit characters are used, the characters
  513.    should conform with the ISO Latin1 Character Set.  The length of
  514.    the User displayable line should be less than 70 Characters; longer
  515.    lines may not fit across some screens.
  516.  
  517.    The Selector string should be no longer than 255 characters. 
  518.  
  519.  
  520. Menu Entity
  521.  
  522. Menu      ::= {DirEntity} Lastline.
  523.  
  524.  
  525. Menu Transaction  (Type 1 item)
  526.  
  527. C: Opens Connection
  528. S: Accepts Connection
  529. C: Sends Selector String
  530. S: Sends Menu Entity
  531.  
  532.    Connection is closed by either client or server (typically server).
  533.  
  534.  
  535. Textfile Entity
  536.  
  537. TextFile  ::= {TextBlock} Lastline
  538.  
  539. Note:  Lines beginning with periods must be prepended with an extra 
  540.      period to ensure that the transmission is not terminated early. 
  541.      The client should strip extra periods at the beginning of the line.
  542.  
  543.  
  544. TextFile Transaction (Type 0 item)
  545.  
  546. C: Opens Connection.
  547. S: Accepts connection
  548. C: Sends Selector String.
  549. S: Sends TextFile Entity.
  550.  
  551.    Connection is closed by either client or server (typically server).
  552.  
  553. Note:  The client should be prepared for the server closing the
  554.        connection without sending the Lastline.  This allows the
  555.        client to use fingerd servers.
  556.  
  557.  
  558. Full-Text Search Transaction (Type 7 item)
  559.  
  560. Word      ::= {UNASCII - ' '}
  561. BoolOp ::= 'and' | 'or' | 'not' | SPACE
  562. SearchStr ::= Word {{SPACE BoolOp} SPACE Word}
  563.  
  564. C: Opens Connection.
  565. C: Sends Selector String, Tab, Search String.
  566. S: Sends Menu Entity.
  567.  
  568. Note:  In absence of 'and', 'or', or 'not' operators, a SPACE is 
  569.        regarded as an implied 'and' operator.  Expression is evaluated
  570.        left to right.
  571.  
  572. Binary file Transaction (Type 9 or 5 item)
  573.  
  574. C: Opens Connection.
  575. S: Accepts connection
  576. C: Sends Selector String.
  577. S: Sends a binary file and closes connection when done.
  578.  
  579. Note: This subject to change... perhaps soon.
  580.  
  581.  
  582.  
  583. Syntactic Meaning for Directory Entities
  584.  
  585.  
  586. The client should interpret the type field as follows:
  587.  
  588. 0   The item is a TextFile Entity. 
  589.     Client should use a TextFile Transaction.
  590.  
  591. 1   The item is a Menu Entity.  
  592.     Client should use a Menu Transaction. 
  593.  
  594. 2   The information applies to a CSO phone book entity.
  595.     Client should talk CSO protocol.
  596.  
  597. 3   Signals an error condition.
  598.  
  599. 4   Item is a Macintosh file encoded in BINHEX format
  600.  
  601. 5   Item is PC-DOS binary file of some sort.  Client gets to decide.
  602.     (Note: this type is far from settled or final)
  603.  
  604. 6   Item is a uuencoded file.
  605.  
  606. 7   The information applies to a Index Server.  
  607.     Client should use a FullText Search transaction.
  608.  
  609. 8   The information applies to a Telnet session. 
  610.     Connect to given host at given port. The name to login as at this
  611.     host is in the selector string.
  612.  
  613. 9   Item is a binary file.  Client must decide what to do with it.
  614.     (Note: this type is far from settled or final)
  615.  
  616. +   The information applies to a duplicated server.  The information 
  617.     contained within is a duplicate of the primary server.  The primary
  618.     server is defined as the last DirEntity that is has a non-plus
  619.     "Type" field.  The client should use the transaction as defined by 
  620.     the primary server Type field.
  621.